A software application may include any number of modules (e.g., classes, functions, procedures, subroutines, or code blocks), and each module may be tested or validated individually. A software module may be tested or validated manually or automatically. In the former case, a person (e.g., a software testing engineer) may manually design test cases for the software module based on the design specification of the module, execute the module under the test cases, and check for module behavior or output that does not agree with the test cases. In the later case, a software-testing tool, implemented as computer software or hardware, may automatically generate test cases for a software module under test, execute the module under test while simulating the test cases, and check for module behavior or output that does not agree with the test cases. The sheer complexity of modern software often renders manual generation or design of test cases inadequate for completely testing the software.